package com.jeff.cloud.consumermovie.feign;

import feign.Contract;
import feign.auth.BasicAuthRequestInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 该类为Feign的配置类(自定义feign配置)
 * 注意：该不应该 在主应用程序上下文的 @ComponentScan中.
 * 结论：和Ribbon配置自定义一样，FeignConfiguration类也不能包含在主应用程序上下文的@ComponentScan中，否则该类配置信息会被所有共享。
 * @author: jeff
 * @date: 2021/8/9 15:08
 */
@Configuration
public class FeignConfiguration {
    /*
     * 将契约改为Feign原生的默认契约。这样就可以使用feign自带的注解了。
     * @return: 默认的feign契约
     * @author: jeff
     * @date: 2021/8/9 15:10
     */
    @Bean
    public Contract feignContract(){
        return new feign.Contract.Default();
    }

    /**
     * 还可自定义Feign的编码器，解码器，日志打印，甚至为Feign添加拦接器。
     * 如一些接口需要进行基于http basic的认证后才能调用，配置类可以这样写：
     * @return
     */
    @Bean
    public BasicAuthRequestInterceptor basicAuthRequestInterceptor(){
        return new BasicAuthRequestInterceptor("user","password");
    }
}
